﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;

namespace PetSoft.GUI.GestRecursos
{
    public partial class GUIMantenimientoServicio : Form
    {
        private Form ventanaActual;
        int cont = 0;
        
        BLServicio blServicio= new BLServicio();
        
    	List<BETipoServicio> tipoLIST=new List<BETipoServicio>();
    	
    	List<BEServicio> listaServicios= new List<BEServicio>();
    	
    	private BEServicio servicioSeleccionado;
    	
		public BEServicio ServicioSeleccionado {
			get { return servicioSeleccionado; }
			set { servicioSeleccionado = value; }
		}
    	
        public GUIMantenimientoServicio()
        {
            InitializeComponent();
            inicializarComponentes();           

        }
        
        public void inicializarComponentes(){
        	tipoLIST=blServicio.getTipoServicio();
			this.TipoServicioCB.DataSource=tipoLIST;
			this.TipoServicioCB.ValueMember="id";
			this.TipoServicioCB.DisplayMember="nombre";
			this.CodigoTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
        	this.nombreServicioTB.KeyPress+=new KeyPressEventHandler(Utils.NoCaracteresRarosTB);
        /*	this.CodigoTB.KeyPress += new KeyPressEventHandler(BuscarBTNClick);
        	this.nombreServicioTB.KeyPress+= new KeyPressEventHandler(BuscarBTNClick);
        	this.TipoServicioCB.SelectedIndexChanged += new EventHandler(BuscarBTNClick);
        	*/
        	this.listaServiciosDGV.RowHeadersVisible=false;
        	this.CodigoTB.ShortcutsEnabled=false;
        	this.nombreServicioTB.ShortcutsEnabled=false;
        	this.SeleccionarServicioBTN.Visible=false;
        }
        
        private void addVentana(Form v)
        {
            //v.MdiParent = this;
            //v.WindowState = FormWindowState.Maximized;

            //if (ventanaActual != null) ventanaActual.Close();
            //ventanaActual = v;

            v.Show();
        }

        private void ModificarBTN_Click(object sender, EventArgs e)
        {
        	int cont = 0;
			int aux = 0;
			int pos = 0;
			
			foreach (DataGridViewRow fila in listaServiciosDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					cont++;
					pos = aux;
				}
				aux++;
			}
			
			if (cont == 0)
			{
				MessageBox.Show("Seleccione un servicio","Aviso");	
			}
			else if (cont == 1)
			{				
				DataGridViewRow fila = listaServiciosDGV.Rows[pos];
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{

					GUIServicio modificaServicio = new GUIServicio(listaServicios[pos],true);
               		modificaServicio.ShowDialog();																											
				}
			}
			else if (cont > 1)
			{
				MessageBox.Show("Seleccione sólo un servicio","Aviso");		
			}
        }

        private void NuevoBTN_Click(object sender, EventArgs e)
        {
        	GUIServicio nuevoServicio = new GUIServicio();
        	nuevoServicio.ShowDialog();
        }
        
        
        
        void BuscarBTNClick(object sender, EventArgs e)
        {
        	llenarGrilla();
        }
        
      	public void llenarGrilla(){
        	     	
        	listaServiciosDGV.Rows.Clear();
        	cont = 0;
        	
        	//búsqueda total
        	
        	if(CodigoTB.Text.Equals("") && 
        	   nombreServicioTB.Text.Equals("") && 
        	   Convert.ToInt16(TipoServicioCB.SelectedValue) == -1){
        		        		
        		listaServicios = blServicio.buscarListaServicios();
        		        	
				int i=0;        		
    			foreach(BEServicio servicio in listaServicios){
    				object[] fila = new object[]{
        				false,
    					servicio.Codigo.ToString(),
						servicio.Descripcion,
						servicio.Tipo.Nombre,
						servicio.Precio.ToString(),
						i++
    				};
    				listaServiciosDGV.Rows.Add(fila);    				
    			}    			
        		
        	//búsqueda parcial
        	}else{
        		
        		BEServicio beServicio = new BEServicio();
        		
        		if(CodigoTB.Text.Equals(""))
	        		beServicio.Codigo = -1;
	        	else
	        		beServicio.Codigo = int.Parse(CodigoTB.Text);
        		        	
	        	beServicio.Descripcion = nombreServicioTB.Text;
	        	
	        	BETipoServicio beTipoServicio = new BETipoServicio();
	        	
	        	if(Convert.ToInt16(TipoServicioCB.SelectedValue) == -1){
					beTipoServicio.Id = -1;
					beTipoServicio.Nombre = "";					
				}
				else{
					beTipoServicio.Id = TipoServicioCB.SelectedIndex;
					beTipoServicio.Nombre = TipoServicioCB.Text;					
				}
				   
				beServicio.Tipo = beTipoServicio;											
				
    			listaServicios = blServicio.buscarListaServicios(beServicio);
        						
    			int i=0;
    			foreach(BEServicio servicio in listaServicios){
    				object[] fila = new object[]{
    					false,
    					servicio.Codigo,
						servicio.Descripcion,
						servicio.Tipo.Nombre,
						servicio.Precio,
					    i++
    				};
    				listaServiciosDGV.Rows.Add(fila);    				
    			
    			}

        	}
        	
        	actualizarCantidadResultados(listaServicios.Count);

        }
        
        void actualizarCantidadResultados(int i){
        	CantidadResultaLBL.Text = "Cantidad de servicios encontrados: "+i;
        }                        
        
        void VerBTNClick(object sender, EventArgs e)
        {
        	int cont = 0;
			int aux = 0;
			int pos = 0;
			
			foreach (DataGridViewRow fila in listaServiciosDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					cont++;
					pos = aux;
				}
				aux++;
			}
			
			if (cont == 0)
			{
				MessageBox.Show("Seleccione un servicio","Aviso");	
			}
			else if (cont == 1)
			{				
				DataGridViewRow fila = listaServiciosDGV.Rows[pos];
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					try {
						GUIServicio modificaServicio = new GUIServicio(listaServicios[(int)(fila.Cells[5].Value)],false);
               			modificaServicio.ShowDialog();																								
					}
					catch (Exception ex){
						Utils.MessageError("Ocurrrio un eror en detalle Servicio",ex);
					}
					
				}
			}
			else if (cont > 1)
			{
				Utils.MessageAviso ("Seleccione solo un Servicio");
			}
        	
        }
        
        void EliminarBTNClick(object sender, EventArgs e)
        {
        	int cont = 0;			
			int pos = 0;
			List<int> indiceServicios = new List<int>();
			
			foreach (DataGridViewRow fila in listaServiciosDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					cont++;
					indiceServicios.Add(int.Parse(fila.Cells[1].Value.ToString()));
				}
			}
			
			if (cont == 0)
			{
				MessageBox.Show("Debe seleecionar al menos un servicio", "Aviso");	
			}			
			else if (cont > 0)
			{
				if (MessageBox.Show("¿Está seguro que desea eliminar al(a los) servicio(s) seleccionado(s)?", 
				                    "Confirmación", MessageBoxButtons.YesNo) == DialogResult.Yes){
					BLServicio blServicio = new BLServicio();
					BEServicio beServicio = new BEServicio();										
					foreach (int indice in indiceServicios){
						beServicio.Codigo = indice;												
						int r = blServicio.eliminarServicio(beServicio);						
						if (r != 1) {
							if (r==2){
								Utils.MessageAviso("El servicio "+ beServicio.Descripcion+ " esta siento utilizado ");
							}
							break;
						}
					}					        	        			        		        				
				}
				
			}
        	
        	llenarGrilla();
        }
        
        void SeleccionarServicioBTNClick(object sender, EventArgs e)
        {
        	int cont = 0;
			int aux = 0;
			int pos = 0;
			
			foreach (DataGridViewRow fila in listaServiciosDGV.Rows)
			{
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{
					cont++;
					pos = aux;
				}
				aux++;
			}
			
			if (cont == 0)
			{
				MessageBox.Show("Seleccione un servicio","Aviso");	
			}
			else if (cont == 1)
			{								
				DataGridViewRow fila = listaServiciosDGV.Rows[pos];
				if (fila.Cells[0].Value != null && (bool)fila.Cells[0].Value)
				{					
					this.servicioSeleccionado = listaServicios[pos];
					MessageBox.Show(servicioSeleccionado.Descripcion);
					this.Dispose();
				}
			}
			else if (cont > 1)
			{
				MessageBox.Show("Seleccione sólo un servicio","Aviso");		
			}
        }
        
        
        void CheckBox1CheckedChanged(object sender, EventArgs e)
        {
        	if(listaServicios != null && listaServicios.Count != 0){
	        	if(SeleccionarDeseleccionarCHB.Checked)	        			        	
					foreach (DataGridViewRow fila in listaServiciosDGV.Rows)
							fila.Cells[0].Value = (bool)true;						        			        
	        	if(!SeleccionarDeseleccionarCHB.Checked)	        			        	
	        		foreach (DataGridViewRow fila in listaServiciosDGV.Rows)					
							fila.Cells[0].Value = (bool)false;						        
        	}else{
        		//MessageBox.Show("No hay elementos para seleccionar","Aviso");
        	}	
        }        	
        
        void LimpiarResultadosBTNClick(object sender, EventArgs e)
        {
        	CodigoTB.Text = "";
        	nombreServicioTB.Text = "";
        	TipoServicioCB.SelectedValue = -1;
        	listaServiciosDGV.Rows.Clear();
        	listaServicios.Clear();
        	SeleccionarDeseleccionarCHB.Checked = false;
        	actualizarCantidadResultados(0);
        }
        
          void ListaServiciosDGVCellContentClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
        	int i = Utils.getSelectedIndex(listaServiciosDGV);
			
			if (i != -1){
				if (listaServiciosDGV.Rows[i].Cells[0].Value == null){
					listaServiciosDGV.Rows[i].Cells[0].Value = false;
				}
				listaServiciosDGV.Rows[i].Cells[0].Value = !((bool)listaServiciosDGV.Rows[i].Cells[0].Value);
			}
        	
        }
    }
}










